聚类算法基本实现[Java]

该博客介绍了如何使用Java实现聚类算法,通过将二维点数据分割成多个格子来实现点的均匀分布。算法首先计算所有点的坐标范围,然后划分网格,将点分配到对应的网格中,以达到指定数量的点。博客包含完整的代码示例。
摘要由CSDN通过智能技术生成

import java.util.*;

/**
 * 需求:在较大的范围内有很多个点,取出n个点,这n个点要“随机”的均匀分布,不能太集中。
 * 聚类运算基本实现:假设有n个二维点(x,y),把这n个点分割成m*m个格子.如m=4,即16个格子.取出10个点,这些点在格子范围内,每个格子只取一次.
 * @author paulliu
 * 以下是我第一个版本,之所以拿出来“献丑”,主要是和大家讨论并且让不了解的朋友能有基本认识
 * ,避免犯我同样“错误”。
 *
 */
public class CluArray {
  private static double minX;
  private static double minY;
  private static ArrayList resultVec;

  public CluArray() {
  }


 /**
   * 聚类运算
   * @param arrayList ArrayList
   */
  public static ArrayList clusterArray(ArrayList listarray) {
    ArrayList result = new ArrayList(); //返回结果list
    resultVec = new ArrayList(); //保存了分类后坐标点序列

    ArrayList xypoint = new ArrayList(); //初始化坐标点
    for (int i = 0; i < listarray.size(); i++) {

      String string = listarray.get(i).toString(); //格式[name,layerid,uid,fid,cx,cy]
      String[] pointxy = string.split(",");
      String id = pointxy[2];//uniqueid
      String x = pointxy[4];
      String y = pointxy[5];
      //保存坐标点
      Point point = new Point();
      double id0 = Double.parseDouble(id);
      point.setId(id0);
      double x0 = Double.parseDouble(x);
      point.setX(x0);
      double y0 = Double.parseDouble(y);
      point.setY(y0);

      xypoint.add(point);
    }

    cluster3(xypoint); //调用聚类方法

    if (xypoint != null) {
      xypoint = null;

    }
    for (int i = 0; i < resultVec.size(); i++) {

      for (int j = 0; j < listarray.size(); j++) {

        String string = listarray.get(j).toString(); //格式[name,layerid,uid,fid,cx,cy]
        String[] pointxy = string.split(",");
     
        double id1 = Double.parseDouble(pointxy[2]);
        double id2 = ( (Point) resultVec.get(i)).getId();
        if (id1 == id2) {
          result.add(string);
        }
      }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值